#!/usr/bin/env python3

# 对输入的字符串进行预处理
def preprocession(string):
  # 去掉字符串中的所有空格
  string = string.replace(" ", "")
  # 把所有字符变成小写
  string = string.lower()
  # 再去掉字符串中的所有标点符号
  string = "".join(c for c in string if c.isalpha())
  
  # 返回处理过的字符串
  return string

# 第 1 题，计算不同字母的数量
def count_characters(string):
  string = preprocession(string)
  dic = dict() # 定义一个空字典，保存字符串中的字母记录
  
  for c in string:
    # 如果已经有字母了，就把计数加 1
    if c in dic:
      dic[c] += 1
    # 否则，就把该字母计数设置成 1
    else:
      dic[c] = 1
  
  return len(dic)

# 第 2 题 返回元音数量
def aeiou_counter(string):
  string = preprocession(string)
  # 预处理之后，把所有元音字母拼接起来
  string = "".join(c for c in string if c == 'a' or c == 'e' or c == 'i' or c == 'o' or c == 'u')
  # 返回拼接后的字符串的长度
  return len(string)
  
# 第 3 题 返回大写字母数量
def capital_letter_counter(string):
  # 字符串有一个 isupper 方法可以判断它是否为大写字母
  # 因此，直接对每个字符串中的字符使用 isupper 方法，
  # 并提取出所有大写字符就好了。
  return len([c for c in string if c.isupper()])

# 第 4 题 统计出现次数最频繁的字母
def the_most_freq_char_counter(string):
  string = preprocession(string)
  dic = dict()
  
  for c in string:
    if c in dic:
      dic[c] += 1
    else:
      dic[c] = 1
  
  print(dic)
  # 用和第 1 题类似的方法统计出字符字典
  # 用 max 方法就可以得到次数最大的记录对应的字母
  # 再用这个字母读取字典中的值即可
  max_key = max(dic, key=dic.get)
  
  return dic[max_key]
  
# 第 5 题 句中最长的单词
def the_longest_word(string):
  # 先把字母都变小写
  string = string.lower()
  # split 方法可以把一个字符串分割成单词数组
  words = string.split()
  
  # 遍历 words 如果其中有标点符号结尾的单词
  # 去掉标点符号后缀
  for i in range(0, len(words)):
    if not words[i][-1].isalpha():
      words[i] = words[i][:-1]
  
  # 找 words 中长度最长的单词
  longest = ""
  for word in words:
    if len(word) > len(longest):
      longest = word
  
  return longest
  
demo = "The quick brown fox, named Roxanne, jumped over Bruno, a lazy dog."

print(count_characters(demo))
print(aeiou_counter(demo))
print(capital_letter_counter(demo))
print(the_most_freq_char_counter(demo))

print(the_longest_word(demo))